home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 2 / CU Amiga Magazine's Super CD-ROM 02 (1996)(EMAP Images)(GB)[!][issue 1996-04].iso / magazine / amiga_e / toolappicon / tm_list.e < prev    next >
Text File  |  1994-05-02  |  7KB  |  208 lines

  1. PROC p_dWriteFList(ptr_list) /*"p_dWriteFList(ptr_list)"*/
  2. /********************************************************************************
  3.  * Para         : address of list
  4.  * Return       : NONE
  5.  * Description  : Write the list and node in stdout.
  6.  *******************************************************************************/
  7.     DEF w_list:PTR TO lh
  8.     DEF w_node:PTR TO ln
  9.     IF DEBUG=TRUE
  10.         w_list:=ptr_list
  11.         w_node:=w_list.head
  12.         WriteF('Adr List:\h[8] Head:\h[8] TailPred:\h[8]\n',w_list,w_list.head,w_list.tailpred)
  13.         WHILE w_node
  14.             IF w_node.succ<>0
  15.                 WriteF('Adr:\h[8] Succ:\h[8] Pred:\h[8] Name:\s\n',w_node,w_node.succ,w_node.pred,w_node.name)
  16.             ENDIF
  17.             w_node:=w_node.succ
  18.         ENDWHILE
  19.     ENDIF
  20. ENDPROC
  21. PROC tm_CleanAppIconList(list:PTR TO lh,mode) /*"tm_CleanAppIconList(list:PTR TO lh,mode)"*/
  22.     DEF node:PTR TO ln
  23.     DEF mappic:PTR TO appiconnode
  24.     mappic:=list.head
  25.     WHILE mappic
  26.         node:=mappic
  27.         IF node.succ
  28.             IF mappic.command THEN Dispose(mappic.command)
  29.             IF mappic.currentdir THEN Dispose(mappic.currentdir)
  30.             IF mappic.hotkey THEN Dispose(mappic.hotkey)
  31.             IF mappic.output THEN Dispose(mappic.output)
  32.             IF mappic.path THEN Dispose(mappic.path)
  33.             IF mappic.pubscreen THEN Dispose(mappic.pubscreen)
  34.             IF mappic.file THEN Dispose(mappic.file)
  35.             IF mappic THEN Dispose(mappic)
  36.         ENDIF
  37.         IF node.succ=0 THEN RemTail(list)
  38.         IF node.pred=0 THEN RemHead(list)
  39.         IF (node.succ<>0) AND (node.pred<>0) THEN Remove(node)
  40.         IF node.name THEN DisposeLink(TrimStr(node.name))
  41.         mappic:=node.succ
  42.     ENDWHILE
  43.     list.tail:=0
  44.     list.head:=list.tail
  45.     list.tailpred:=list.head
  46.     list.type:=0
  47.     list.pad:=0
  48.     dWriteF(['tm_CleanAppIconList() \h[8]',' \d\n'],[list,mode])
  49.     IF mode=LIST_REMOVE
  50.         IF list THEN Dispose(list)
  51.     ELSEIF mode=LIST_CLEAN
  52.         RETURN list
  53.     ENDIF
  54. ENDPROC
  55. PROC tm_RemAppIconNode(list:PTR TO lh,numnode) /*"tm_RemAppIconNode(list:PTR TO lh,numnode)"*/
  56.     DEF node:PTR TO ln
  57.     DEF mappic:PTR TO appiconnode,count=0,retour
  58.     DEF newnode:PTR TO ln
  59.     DEF test
  60.     dWriteF(['tm_RemAppIconNode()\n'],0)
  61.     mappic:=list.head
  62.     WHILE mappic
  63.         node:=mappic
  64.         IF node.succ
  65.         IF count=numnode
  66.             IF mappic.command THEN DisposeLink(TrimStr(mappic.command))
  67.             IF mappic.currentdir THEN DisposeLink(TrimStr(mappic.currentdir))
  68.             IF mappic.hotkey THEN DisposeLink(TrimStr(mappic.hotkey))
  69.             IF mappic.output THEN DisposeLink(TrimStr(mappic.output))
  70.             IF mappic.path THEN DisposeLink(TrimStr(mappic.path))
  71.             IF mappic.pubscreen THEN DisposeLink(TrimStr(mappic.pubscreen))
  72.             IF mappic.file THEN DisposeLink(TrimStr(mappic.file))
  73.             IF mappic THEN Dispose(mappic)
  74.             IF node.succ=0
  75.                 test:=RemTail(list)
  76.                 dWriteF(['-> RemTail: list \h[8]',' return \h[8]\n'],[list,test])
  77.                 retour:=numnode-1
  78.             ELSEIF node.pred=0
  79.                 test:=RemHead(list)
  80.                 retour:=numnode
  81.                 newnode:=p_GetAdrNode(list,numnode)
  82.                 dWriteF(['->RemHead \h[8]',' return \h[8] ',' newhead \h[8]\n'],[list,test,newnode])
  83.                 list.head:=newnode
  84.                 newnode.pred:=0
  85.             ELSEIF (node.succ<>0) AND (node.pred<>0)
  86.                 test:=Remove(node)
  87.                 dWriteF(['->Remove \h[8]',' return \h[8] ',' delnode \h[8]\n'],[list,test,node])
  88.                 retour:=numnode-1
  89.             ENDIF
  90.             IF node.name THEN Dispose(node.name)
  91.         ENDIF
  92.         ENDIF
  93.         INC count
  94.         mappic:=node.succ
  95.     ENDWHILE
  96.     dWriteF(['tm_RemAppIconNode() \h[8]',' Currentnode \d\n'],[list,retour])
  97.     RETURN retour
  98. ENDPROC
  99. PROC tm_AddAppIconNode(list:PTR TO lh) HANDLE /*"tm_AddAppIconNode(list:PTR TO lh)"*/
  100.     DEF myappic:PTR TO appiconnode
  101.     DEF node:PTR TO ln
  102.     DEF nn
  103.     node:=New(SIZEOF ln)
  104.     myappic:=New(SIZEOF appiconnode)
  105.     node.succ:=0
  106.     node.name:=String(EstrLen('(New)'))
  107.     StrCopy(node.name,'(New)',ALL)
  108.     CopyMem(node,myappic.node,SIZEOF ln)
  109.     AddTail(list_appicon,myappic.node)
  110.     nn:=p_GetNumNode(list,myappic.node)
  111.     IF nn=0
  112.         list.head:=myappic.node
  113.         node.pred:=0
  114.     ENDIF
  115.     myappic.exectype:=TMET_CLI
  116.     myappic.command:=NIL
  117.     myappic.hotkey:=NIL
  118.     myappic.stack:=4000
  119.     myappic.priority:=0
  120.     myappic.delay:=0
  121.     myappic.currentdir:=NIL
  122.     myappic.path:=NIL
  123.     myappic.output:=NIL
  124.     myappic.pubscreen:=NIL
  125.     myappic.arguments:=FALSE
  126.     myappic.tofront:=FALSE
  127.     myappic.file:=NIL
  128.     myappic.posx:=0
  129.     myappic.posy:=0
  130.     myappic.showname:=TRUE
  131.     IF node THEN Dispose(node)
  132.     Raise(nn)
  133. EXCEPT
  134.     dWriteF(['tm_AddAppIconNode() \h[8]',' \d\n'],[list,nn])
  135.     RETURN exception
  136. ENDPROC
  137. PROC p_InitList() HANDLE /*"p_InitList()"*/
  138. /********************************************************************************
  139.  * Para         : NONE
  140.  * Return       : address of the new list if ok,else NIL.
  141.  * Description  : Initialise a list.
  142.  *******************************************************************************/
  143.     DEF i_list:PTR TO lh
  144.     i_list:=New(SIZEOF lh)
  145.     i_list.tail:=0
  146.     i_list.head:=i_list.tail
  147.     i_list.tailpred:=i_list.head
  148.     i_list.type:=0
  149.     i_list.pad:=0
  150.     IF i_list THEN Raise(i_list) ELSE Raise(NIL)
  151. EXCEPT
  152.     dWriteF(['p_InitList() \h[8]\n'],[exception])
  153.     RETURN exception
  154. ENDPROC
  155. PROC p_GetAdrNode(ptr_list,num_node) /*"p_GetAdrNode(ptr_list,num_node)"*/
  156. /********************************************************************************
  157.  * Para         : address of list,number's node.
  158.  * Return       : address of node or NIL.
  159.  * Description  : Find the address of a node.
  160.  *******************************************************************************/
  161.     DEF g_list:PTR TO lh
  162.     DEF g_node:PTR TO ln
  163.     DEF count=0
  164.     g_list:=ptr_list
  165.     g_node:=g_list.head
  166.     WHILE g_node
  167.         IF count=num_node THEN RETURN g_node
  168.         INC count
  169.         g_node:=g_node.succ
  170.     ENDWHILE
  171.     RETURN NIL
  172. ENDPROC
  173. PROC p_GetNumNode(ptr_list,adr_node) /*"p_GetNumNode(ptr_list,adr_node)"*/
  174. /********************************************************************************
  175.  * Para         : address of list,address of node
  176.  * Return       : the number of the node.
  177.  * Description  : Find the number of a node.
  178.  *******************************************************************************/
  179.     DEF g_list:PTR TO lh
  180.     DEF g_node:PTR TO ln
  181.     DEF count=0
  182.     g_list:=ptr_list
  183.     g_node:=g_list.head
  184.     WHILE g_node
  185.         IF g_node=adr_node THEN RETURN count
  186.         INC count
  187.         g_node:=g_node.succ
  188.     ENDWHILE
  189.     RETURN NIL
  190. ENDPROC
  191. PROC p_EmptyList(adr_list) /*"p_EmptyList(adr_list)"*/
  192. /********************************************************************************
  193.  * Para         : address of list.
  194.  * Return       : TRUE if list is empty,else address of list.
  195.  * Description  : Look if a list is empty.
  196.  *******************************************************************************/
  197.     DEF e_list:PTR TO lh,count=0
  198.     DEF e_node:PTR TO ln
  199.     e_list:=adr_list
  200.     e_node:=e_list.head
  201.     WHILE e_node
  202.         IF e_node.succ<>0 THEN INC count
  203.         e_node:=e_node.succ
  204.     ENDWHILE
  205.     IF count=0 THEN RETURN TRUE ELSE RETURN e_list
  206. ENDPROC
  207.  
  208.